From 0bf4c2420dbc318052a9e561af6bc2eefdb9e7a1 Mon Sep 17 00:00:00 2001 From: Chris Williams Date: Tue, 9 Apr 2019 16:26:25 -0400 Subject: [PATCH] gdkframeclockidle: Don't permanently skew frame time Since commit 3b2f9395, the frame time may be set into the future, so only ensure monotonicity, and don't store the offset. This prevents the frame time from becoming out of sync with g_get_monotonic_time(). Fixes #1612 --- gdk/gdkframeclockidle.c | 20 ++++---------------- 1 file changed, 4 insertions(+), 16 deletions(-) diff --git a/gdk/gdkframeclockidle.c b/gdk/gdkframeclockidle.c index 4a6ea10817..0e9bc3b1b7 100644 --- a/gdk/gdkframeclockidle.c +++ b/gdk/gdkframeclockidle.c @@ -38,8 +38,6 @@ struct _GdkFrameClockIdlePrivate { - /* timer_base is used to avoid ever going backward */ - gint64 timer_base; gint64 frame_time; gint64 min_next_frame_time; gint64 sleep_serial; @@ -160,22 +158,12 @@ compute_frame_time (GdkFrameClockIdle *idle) { GdkFrameClockIdlePrivate *priv = idle->priv; gint64 computed_frame_time; - gint64 elapsed; - elapsed = g_get_monotonic_time () + priv->timer_base; - if (elapsed < priv->frame_time) - { - /* clock went backward. adapt to that by forevermore increasing - * timer_base. For now, assume we've gone forward in time 1ms. - */ - /* hmm. just fix GTimer? */ + computed_frame_time = g_get_monotonic_time (); + + /* ensure monotonicity of frame time */ + if (computed_frame_time <= priv->frame_time) computed_frame_time = priv->frame_time + 1; - priv->timer_base += (priv->frame_time - elapsed) + 1; - } - else - { - computed_frame_time = elapsed; - } return computed_frame_time; } -- 2.30.2